/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modules.estoque.models.dao;

/**
 *
 * @author Clezio
 */
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import modules.estoque.models.dto.GruposAcesso;
import modules.estoque.models.dto.GruposAcessosPermissao;
import modules.estoque.models.dto.GruposProduto;
import modules.estoque.models.dto.Permissao;
import modules.estoque.util.HibernateUtil;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class GruposAcessoDAO {

    private SessionFactory sessionFactory;

    public GruposAcessoDAO() throws Exception {
        sessionFactory = HibernateUtil.getSessionFactory();
    }

    public void save(GruposAcesso gruposAcesso) throws Exception {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        if (gruposAcesso.getId() > 0) {
            Iterator it = retrieve(gruposAcesso.getId()).getGruposAcessosPermissoeses().iterator();
            while (it.hasNext()) {
                GruposAcessosPermissao gruposAcessosPermissao = (GruposAcessosPermissao) it.next();
                session.delete(gruposAcessosPermissao);
            }
            session.update(gruposAcesso);
        } else {
            session.save(gruposAcesso);
        }
        session.flush();
        tx.commit();
        session.close();
    }

    public java.util.List getList(String condicao) throws Exception {
        Session session = sessionFactory.openSession();
        Query query = session.createQuery(condicao);
        List gruposAcessos = query.list();
        session.flush();
        session.close();
        return gruposAcessos;
    }

    public GruposAcesso retrieve(Integer pk) throws Exception {
        Session session = sessionFactory.openSession();
        GruposAcesso gruposAcesso = (GruposAcesso) session.load(GruposAcesso.class, pk);
        GruposAcesso gruposAcessoDTO = mountDto(gruposAcesso);
        session.flush();
        session.close();
        return gruposAcessoDTO;
    }

    public void delete(GruposAcesso GruposAcesso) throws Exception {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.delete(GruposAcesso);
        session.flush();
        tx.commit();
        session.close();
    }

    public GruposAcesso mountDto(GruposAcesso gruposAcesso) {
        GruposAcesso gruposAcessoDTO = new GruposAcesso();
        gruposAcessoDTO.setId(gruposAcesso.getId());
        gruposAcessoDTO.setNome(gruposAcesso.getNome());
        gruposAcessoDTO.setAtivo(gruposAcesso.isAtivo());
        gruposAcessoDTO.setGruposAcessosPermissoeses(new HashSet(gruposAcesso.getGruposAcessosPermissoeses()));
        gruposAcessoDTO.setGruposAcessosUsuarioses(new HashSet(gruposAcesso.getGruposAcessosUsuarioses()));
        return gruposAcessoDTO;
    }
}
